{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 载入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "target_url = (\"https://archive.ics.uci.edu/ml/machine-\"\n",
    "              \"learning-databases/glass/glass.data\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Attribute Information:  \n",
    "\n",
    "1. Id number: 1 to 214  \n",
    "2. RI: refractive index  \n",
    "3. Na: Sodium (unit measurement: weight percent in corresponding oxide, as are attributes 4-10)  \n",
    "4. Mg: Magnesium  \n",
    "5. Al: Aluminum  \n",
    "6. Si: Silicon  \n",
    "7. K: Potassium  \n",
    "8. Ca: Calcium  \n",
    "9. Ba: Barium  \n",
    "10. Fe: Iron  \n",
    "11. Type of glass: (class attribute)  \n",
    "-- 1 building_windows_float_processed  \n",
    "-- 2 building_windows_non_float_processed  \n",
    "-- 3 vehicle_windows_float_processed  \n",
    "-- 4 vehicle_windows_non_float_processed (none in this database)  \n",
    "-- 5 containers  \n",
    "-- 6 tableware  \n",
    "-- 7 headlamps     "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>RI</th>\n",
       "      <th>Na</th>\n",
       "      <th>Mg</th>\n",
       "      <th>Al</th>\n",
       "      <th>Si</th>\n",
       "      <th>K</th>\n",
       "      <th>Ca</th>\n",
       "      <th>Ba</th>\n",
       "      <th>Fe</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1.52101</td>\n",
       "      <td>13.64</td>\n",
       "      <td>4.49</td>\n",
       "      <td>1.10</td>\n",
       "      <td>71.78</td>\n",
       "      <td>0.06</td>\n",
       "      <td>8.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1.51761</td>\n",
       "      <td>13.89</td>\n",
       "      <td>3.60</td>\n",
       "      <td>1.36</td>\n",
       "      <td>72.73</td>\n",
       "      <td>0.48</td>\n",
       "      <td>7.83</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1.51618</td>\n",
       "      <td>13.53</td>\n",
       "      <td>3.55</td>\n",
       "      <td>1.54</td>\n",
       "      <td>72.99</td>\n",
       "      <td>0.39</td>\n",
       "      <td>7.78</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1.51766</td>\n",
       "      <td>13.21</td>\n",
       "      <td>3.69</td>\n",
       "      <td>1.29</td>\n",
       "      <td>72.61</td>\n",
       "      <td>0.57</td>\n",
       "      <td>8.22</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1.51742</td>\n",
       "      <td>13.27</td>\n",
       "      <td>3.62</td>\n",
       "      <td>1.24</td>\n",
       "      <td>73.08</td>\n",
       "      <td>0.55</td>\n",
       "      <td>8.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ID       RI     Na    Mg    Al     Si     K    Ca   Ba   Fe  Type\n",
       "0   1  1.52101  13.64  4.49  1.10  71.78  0.06  8.75  0.0  0.0     1\n",
       "1   2  1.51761  13.89  3.60  1.36  72.73  0.48  7.83  0.0  0.0     1\n",
       "2   3  1.51618  13.53  3.55  1.54  72.99  0.39  7.78  0.0  0.0     1\n",
       "3   4  1.51766  13.21  3.69  1.29  72.61  0.57  8.22  0.0  0.0     1\n",
       "4   5  1.51742  13.27  3.62  1.24  73.08  0.55  8.07  0.0  0.0     1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "columns_mapping = {\n",
    "    'ID': 'ID',\n",
    "    'RI': '折射率',\n",
    "    'Na': '钠',\n",
    "    'Mg': '镁',\n",
    "    'Al': '铝',\n",
    "    'Si': '硅',\n",
    "    'K': '钾',\n",
    "    'Ca': '钙',\n",
    "    'Ba': '钡',\n",
    "    'Fe': '铁',\n",
    "    'Type': '类型',\n",
    "}\n",
    "\n",
    "try:\n",
    "    df_glass = pd.read_csv(\"../../data/glass.csv\", header=0)\n",
    "except Exception as e:\n",
    "    print(e)\n",
    "    df_glass = pd.read_csv(target_url, header=None, prefix=\"V\")\n",
    "    df_glass.columns = columns_mapping.keys()\n",
    "    df_glass.to_csv(\"../../data/glass.csv\", index=False)\n",
    "\n",
    "df_glass.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of Rows:  214\n",
      "Number of Cols:  11\n"
     ]
    }
   ],
   "source": [
    "nrows, ncols = df_glass.shape\n",
    "print(\"Number of Rows: \", nrows)\n",
    "print(\"Number of Cols: \", ncols)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 玻璃数据的基本统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_glass_summary = df_glass.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>RI</th>\n",
       "      <th>Na</th>\n",
       "      <th>Mg</th>\n",
       "      <th>Al</th>\n",
       "      <th>Si</th>\n",
       "      <th>K</th>\n",
       "      <th>Ca</th>\n",
       "      <th>Ba</th>\n",
       "      <th>Fe</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>107.500000</td>\n",
       "      <td>1.518365</td>\n",
       "      <td>13.407850</td>\n",
       "      <td>2.684533</td>\n",
       "      <td>1.444907</td>\n",
       "      <td>72.650935</td>\n",
       "      <td>0.497056</td>\n",
       "      <td>8.956963</td>\n",
       "      <td>0.175047</td>\n",
       "      <td>0.057009</td>\n",
       "      <td>2.780374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>61.920648</td>\n",
       "      <td>0.003037</td>\n",
       "      <td>0.816604</td>\n",
       "      <td>1.442408</td>\n",
       "      <td>0.499270</td>\n",
       "      <td>0.774546</td>\n",
       "      <td>0.652192</td>\n",
       "      <td>1.423153</td>\n",
       "      <td>0.497219</td>\n",
       "      <td>0.097439</td>\n",
       "      <td>2.103739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.511150</td>\n",
       "      <td>10.730000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.290000</td>\n",
       "      <td>69.810000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.430000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>54.250000</td>\n",
       "      <td>1.516523</td>\n",
       "      <td>12.907500</td>\n",
       "      <td>2.115000</td>\n",
       "      <td>1.190000</td>\n",
       "      <td>72.280000</td>\n",
       "      <td>0.122500</td>\n",
       "      <td>8.240000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>107.500000</td>\n",
       "      <td>1.517680</td>\n",
       "      <td>13.300000</td>\n",
       "      <td>3.480000</td>\n",
       "      <td>1.360000</td>\n",
       "      <td>72.790000</td>\n",
       "      <td>0.555000</td>\n",
       "      <td>8.600000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>160.750000</td>\n",
       "      <td>1.519157</td>\n",
       "      <td>13.825000</td>\n",
       "      <td>3.600000</td>\n",
       "      <td>1.630000</td>\n",
       "      <td>73.087500</td>\n",
       "      <td>0.610000</td>\n",
       "      <td>9.172500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>214.000000</td>\n",
       "      <td>1.533930</td>\n",
       "      <td>17.380000</td>\n",
       "      <td>4.490000</td>\n",
       "      <td>3.500000</td>\n",
       "      <td>75.410000</td>\n",
       "      <td>6.210000</td>\n",
       "      <td>16.190000</td>\n",
       "      <td>3.150000</td>\n",
       "      <td>0.510000</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               ID          RI          Na          Mg          Al          Si  \\\n",
       "count  214.000000  214.000000  214.000000  214.000000  214.000000  214.000000   \n",
       "mean   107.500000    1.518365   13.407850    2.684533    1.444907   72.650935   \n",
       "std     61.920648    0.003037    0.816604    1.442408    0.499270    0.774546   \n",
       "min      1.000000    1.511150   10.730000    0.000000    0.290000   69.810000   \n",
       "25%     54.250000    1.516523   12.907500    2.115000    1.190000   72.280000   \n",
       "50%    107.500000    1.517680   13.300000    3.480000    1.360000   72.790000   \n",
       "75%    160.750000    1.519157   13.825000    3.600000    1.630000   73.087500   \n",
       "max    214.000000    1.533930   17.380000    4.490000    3.500000   75.410000   \n",
       "\n",
       "                K          Ca          Ba          Fe        Type  \n",
       "count  214.000000  214.000000  214.000000  214.000000  214.000000  \n",
       "mean     0.497056    8.956963    0.175047    0.057009    2.780374  \n",
       "std      0.652192    1.423153    0.497219    0.097439    2.103739  \n",
       "min      0.000000    5.430000    0.000000    0.000000    1.000000  \n",
       "25%      0.122500    8.240000    0.000000    0.000000    1.000000  \n",
       "50%      0.555000    8.600000    0.000000    0.000000    2.000000  \n",
       "75%      0.610000    9.172500    0.000000    0.100000    3.000000  \n",
       "max      6.210000   16.190000    3.150000    0.510000    7.000000  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_glass_summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RI</th>\n",
       "      <th>Na</th>\n",
       "      <th>Mg</th>\n",
       "      <th>Al</th>\n",
       "      <th>Si</th>\n",
       "      <th>K</th>\n",
       "      <th>Ca</th>\n",
       "      <th>Ba</th>\n",
       "      <th>Fe</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.52101</td>\n",
       "      <td>13.64</td>\n",
       "      <td>4.49</td>\n",
       "      <td>1.10</td>\n",
       "      <td>71.78</td>\n",
       "      <td>0.06</td>\n",
       "      <td>8.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.51761</td>\n",
       "      <td>13.89</td>\n",
       "      <td>3.60</td>\n",
       "      <td>1.36</td>\n",
       "      <td>72.73</td>\n",
       "      <td>0.48</td>\n",
       "      <td>7.83</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.51618</td>\n",
       "      <td>13.53</td>\n",
       "      <td>3.55</td>\n",
       "      <td>1.54</td>\n",
       "      <td>72.99</td>\n",
       "      <td>0.39</td>\n",
       "      <td>7.78</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.51766</td>\n",
       "      <td>13.21</td>\n",
       "      <td>3.69</td>\n",
       "      <td>1.29</td>\n",
       "      <td>72.61</td>\n",
       "      <td>0.57</td>\n",
       "      <td>8.22</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.51742</td>\n",
       "      <td>13.27</td>\n",
       "      <td>3.62</td>\n",
       "      <td>1.24</td>\n",
       "      <td>73.08</td>\n",
       "      <td>0.55</td>\n",
       "      <td>8.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        RI     Na    Mg    Al     Si     K    Ca   Ba   Fe  Type\n",
       "0  1.52101  13.64  4.49  1.10  71.78  0.06  8.75  0.0  0.0     1\n",
       "1  1.51761  13.89  3.60  1.36  72.73  0.48  7.83  0.0  0.0     1\n",
       "2  1.51618  13.53  3.55  1.54  72.99  0.39  7.78  0.0  0.0     1\n",
       "3  1.51766  13.21  3.69  1.29  72.61  0.57  8.22  0.0  0.0     1\n",
       "4  1.51742  13.27  3.62  1.24  73.08  0.55  8.07  0.0  0.0     1"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 上述结果包含了ID这个没有用的列\n",
    "df_glass_normalized = df_glass.iloc[:, 1:ncols]\n",
    "df_glass_normalized.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>RI</th>\n",
       "      <th>Na</th>\n",
       "      <th>Mg</th>\n",
       "      <th>Al</th>\n",
       "      <th>Si</th>\n",
       "      <th>K</th>\n",
       "      <th>Ca</th>\n",
       "      <th>Ba</th>\n",
       "      <th>Fe</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>214.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.518365</td>\n",
       "      <td>13.407850</td>\n",
       "      <td>2.684533</td>\n",
       "      <td>1.444907</td>\n",
       "      <td>72.650935</td>\n",
       "      <td>0.497056</td>\n",
       "      <td>8.956963</td>\n",
       "      <td>0.175047</td>\n",
       "      <td>0.057009</td>\n",
       "      <td>2.780374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.003037</td>\n",
       "      <td>0.816604</td>\n",
       "      <td>1.442408</td>\n",
       "      <td>0.499270</td>\n",
       "      <td>0.774546</td>\n",
       "      <td>0.652192</td>\n",
       "      <td>1.423153</td>\n",
       "      <td>0.497219</td>\n",
       "      <td>0.097439</td>\n",
       "      <td>2.103739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.511150</td>\n",
       "      <td>10.730000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.290000</td>\n",
       "      <td>69.810000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.430000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.516523</td>\n",
       "      <td>12.907500</td>\n",
       "      <td>2.115000</td>\n",
       "      <td>1.190000</td>\n",
       "      <td>72.280000</td>\n",
       "      <td>0.122500</td>\n",
       "      <td>8.240000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.517680</td>\n",
       "      <td>13.300000</td>\n",
       "      <td>3.480000</td>\n",
       "      <td>1.360000</td>\n",
       "      <td>72.790000</td>\n",
       "      <td>0.555000</td>\n",
       "      <td>8.600000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.519157</td>\n",
       "      <td>13.825000</td>\n",
       "      <td>3.600000</td>\n",
       "      <td>1.630000</td>\n",
       "      <td>73.087500</td>\n",
       "      <td>0.610000</td>\n",
       "      <td>9.172500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.533930</td>\n",
       "      <td>17.380000</td>\n",
       "      <td>4.490000</td>\n",
       "      <td>3.500000</td>\n",
       "      <td>75.410000</td>\n",
       "      <td>6.210000</td>\n",
       "      <td>16.190000</td>\n",
       "      <td>3.150000</td>\n",
       "      <td>0.510000</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               RI          Na          Mg          Al          Si           K  \\\n",
       "count  214.000000  214.000000  214.000000  214.000000  214.000000  214.000000   \n",
       "mean     1.518365   13.407850    2.684533    1.444907   72.650935    0.497056   \n",
       "std      0.003037    0.816604    1.442408    0.499270    0.774546    0.652192   \n",
       "min      1.511150   10.730000    0.000000    0.290000   69.810000    0.000000   \n",
       "25%      1.516523   12.907500    2.115000    1.190000   72.280000    0.122500   \n",
       "50%      1.517680   13.300000    3.480000    1.360000   72.790000    0.555000   \n",
       "75%      1.519157   13.825000    3.600000    1.630000   73.087500    0.610000   \n",
       "max      1.533930   17.380000    4.490000    3.500000   75.410000    6.210000   \n",
       "\n",
       "               Ca          Ba          Fe        Type  \n",
       "count  214.000000  214.000000  214.000000  214.000000  \n",
       "mean     8.956963    0.175047    0.057009    2.780374  \n",
       "std      1.423153    0.497219    0.097439    2.103739  \n",
       "min      5.430000    0.000000    0.000000    1.000000  \n",
       "25%      8.240000    0.000000    0.000000    1.000000  \n",
       "50%      8.600000    0.000000    0.000000    2.000000  \n",
       "75%      9.172500    0.000000    0.100000    3.000000  \n",
       "max     16.190000    3.150000    0.510000    7.000000  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_glass_normalized_summary = df_glass_normalized.describe()\n",
    "df_glass_normalized_summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(df_glass_normalized.shape[1]):\n",
    "    mean = df_glass_normalized_summary.iloc[1, i]\n",
    "    std = df_glass_normalized_summary.iloc[2, i]\n",
    "    df_glass_normalized.iloc[:, i] = (df_glass_normalized.iloc[:, i] - mean)/std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(16, 8))\n",
    "\n",
    "ax = fig.add_subplot(111)\n",
    "df_glass_normalized.plot(kind='box', ax=ax)\n",
    "ax.set_xlabel(\"Attribute\")\n",
    "ax.set_ylabel(\"Quartile Ranges - Normalized\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注：  \n",
    "    玻璃数据的箱线图异常点较多，正常吗？  \n",
    "    （1）这是一个分类问题，在属性值和类别之间不需要存在任何连续性，也就是说不应该期望在各类别之间，属性值是相互接近或近似的  \n",
    "    （2）它的数据集是非平衡的，成员最多的组76个，最小的9个。统计时，平均值可能是由成员最多的那个类的属性决定，因此不能期望其他类别也有相似的属性值   \n",
    "    ==>此时使用“平行坐标图”也许可以揭示更多的信息  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
